package com.nlgc365.designpattern.Chapter04_Pattern.Creation.P01_Singleton.Usage.Template;

/**
 * 单例模式 - 饱汉式
 * 需要类实例的时候才创建
 */
public class Singleton02_Full {
    /**
     * 单例对象
     */
    private static Singleton02_Full singleton;

    /**
     * 关键: 私有化构造函数, 不让外界创建对象
     */
    private Singleton02_Full() {
    }

    /**
     * 作用: 提供一个获取单例实例的静态方法
     *
     * @return: 单例
     */
    public static Singleton02_Full getInstance() {
        /*
        问题: 获取单例的方法, 存在线程安全问题
        多线程同时访问到下面if判断处, 同时判断为true, 此时就会多线程中各自创建实例.
         */
        if (singleton == null) {
            singleton = new Singleton02_Full();
        }
        return singleton;
    }

}
